/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package controladoras.persistencia;


import erros.ErroPersistencia;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;


/**
 * Classe que implementa a controladora de conexao.
 * @author Thiago Stuckert
 */
public class CntrConexao {

    /**
     * Referencia para o objeto da controladora de conexao.
     */
    private static CntrConexao ref;

    /**
     * Objeto que representa a conexao com o banco.
     */
    private Connection conexao;
    /**
     * Pasta aonde esta localizada o banco de dados.
     */
    private String url = "jdbc:hsqldb:file:db";
    /**
     * Usario de acesso ao banco de dados.
     */
    private String usuario = "sa";
    /**
     * Senha de acesso ao banco de dados.
     */
    private String senha = "";

    /**
     * Construtor vazio da controladora de conexao.
     */
    private CntrConexao() {
    }

    /**
     * Metodo instancia um objeto da classe da controladora de conexao caso
     * nao exista, caso contrario retorna o objeto existente.
     * @return Referencia para a controladora de conexao.
     */
    public static CntrConexao instanciar() {
        if (ref == null) {
            ref = new CntrConexao();
        }
        return ref;
    }

    /**
     * Método getConexao abre conexao com o banco de dados.
     * @return Conexao com o banco de dados.
     * @throws ErroPersistencia Lança exceção caso não consiga
     * abrir conexão com o banco de dados.
     */
    public Connection getConexao() throws ErroPersistencia {
        try {
            if (conexao == null)
                conexao = DriverManager.getConnection(url, usuario, senha);
            if (conexao.isClosed())
                conexao = DriverManager.getConnection(url, usuario, senha);
        } catch (SQLException e){
            throw new ErroPersistencia("Erro no estabelecimento da conexão.");
        }
        return conexao;
    }

}